﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Mvc;
using Libreria.SICOM.Negocio;
using Libreria.SICOM.Modelo;
using System.Configuration;
using Web.SICOM.Models;


namespace Web.SICOM.Controllers
{
    public class MuestraController : Controller
    {
        //
        // GET: /Muestra/



        public ActionResult Index()
        {
            if (Session["Autenticado"] != "True")
            {
                return RedirectToAction("Index", "Inicio");
            }
            String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            List<Muestra> muestras = new MuestraNegocio().consultarMuestras(cdc);
            Muestrasreporte final = new Muestrasreporte();

            foreach (var muestra in muestras)
            {
                Muestramod MuestraTemp = new Muestramod();
                MuestraTemp.Codigo = muestra.Identificador;

                ProyectoNegocio proyectoaBuscar = new ProyectoNegocio();
                MuestraTemp.Proyecto = ((Proyecto)proyectoaBuscar.ConsultarPorIdentificador(muestra.Iddeproyecto, cdc)).Nombre;

                LugarNegocio LugaraBuscar = new LugarNegocio();
                MuestraTemp.Lugar = ((Lugar)LugaraBuscar.ConsultarPorIdentificador(muestra.Iddelugar, cdc)).Nombre;
                MuestraTemp.Fecha = muestra.Fechadecaptura;

                EquipodeMedicionNegocio equipoaBuscar = new EquipodeMedicionNegocio();
                MuestraTemp.Equipodemedicion = ((EquipodeMedicion)equipoaBuscar.consultarPorIdentificador(muestra.Iddeequipo, cdc)).Nombre;
                TipodeMuestraNegocio tipodemuestraaBuscar = new TipodeMuestraNegocio();
                MuestraTemp.TipoMuestra = ((TipodeMuestra)tipodemuestraaBuscar.consultarPorIdentificador(muestra.Idtipodemuestra, cdc)).Nombre;
                VariableNegocio variableaBuscar = new VariableNegocio();
                Variable nuevavariable = variableaBuscar.ConsultarPorIdentificador(muestra.Iddevariable, cdc);
                MuestraTemp.Variable = nuevavariable.Nombre;
                MuestraTemp.Valor = muestra.Valor;
                UnidaddeMedidaNegocio unidadaBuscar = new UnidaddeMedidaNegocio();
                MuestraTemp.Unidad = ((UnidaddeMedida)unidadaBuscar.consultarPorIdentificador(nuevavariable.Unidad, cdc)).Nombre;
                final.listademuestras.Add(MuestraTemp);
            }
            ViewData.Model = final;
            if (((Muestrasreporte)ViewData.Model).listademuestras.Count == 0)
            {
                ViewData.Model= "No Hay Reporte  de Muestras Asociados";
            }
            return View();

        }



        public ActionResult Crear()
        {

            if (Session["Autenticado"] != "True")
            {
                return RedirectToAction("Index", "Inicio");
            }
            String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            MuestraModelo modelo = new MuestraModelo();

            TipodeMuestraNegocio tipomuetrabo = new TipodeMuestraNegocio();
            ProyectoNegocio proyectobo = new ProyectoNegocio();
            LugarNegocio lugarbo = new LugarNegocio();
            EquipodeMedicionNegocio equipobo = new EquipodeMedicionNegocio();
            VariableNegocio variablebo = new VariableNegocio();
            List<TipodeMuestra> tiposdemuestrafinal= new List<TipodeMuestra>();
            List<TipodeMuestra> tiposdemuestra = tipomuetrabo.consultarTiposdeMuestra(cdc);
            for (int i = tiposdemuestra.Count - 1; i >= 0; i--)
            {
                if (tiposdemuestra[i].Nombre == "agua" || tiposdemuestra[i].Nombre == "Agua" || tiposdemuestra[i].Nombre == "suelo" || tiposdemuestra[i].Nombre == "Suelo")
                {
                    tiposdemuestrafinal.Add(tiposdemuestra[i]);
                }

            }
            modelo.tiposdemuestra = tiposdemuestrafinal;
            modelo.proyectos = proyectobo.ConsultarProyectos(cdc);
            modelo.lugares = lugarbo.consultarLugares(cdc);
            modelo.equipos = equipobo.consultarEquiposdeMedicion(cdc);
            modelo.variables = variablebo.consultarVariables(cdc);
            ViewData.Model = modelo;
            return View();

        }

        [HttpPost]
        public ActionResult Insertar(Muestra muestra, string hora, string minuto)
        {
            String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            List<Muestra> muestras = new MuestraNegocio().consultarMuestras(cdc);
            if (muestra.Idtipodemuestra == 0)
            {
                ModelState.AddModelError("Idtipodemuestra", "El tipo de muestra no ha sido especificado.");
            }
            if (muestra.Iddeproyecto == 0)
            {
                ModelState.AddModelError("Iddeproyecto", "El proyecto no ha sido especificado.");
            }
            if (muestra.Iddelugar == 0)
            {
                ModelState.AddModelError("Iddelugar", "El Lugar no ha sido especificado.");
            }
            if (muestra.Iddeequipo == 0)
            {
                ModelState.AddModelError("Iddeequipo", "El Equipo de medicion no ha sido especificado.");
            }
            if (muestra.Iddevariable == 0)
            {
                ModelState.AddModelError("Iddevariable", "La Variable no ha sido especificada.");
            }
            if (!ModelState.IsValid)
            {

                MuestraModelo modelo = new MuestraModelo();
                TipodeMuestraNegocio tipomuetrabo = new TipodeMuestraNegocio();
                ProyectoNegocio proyectobo = new ProyectoNegocio();
                LugarNegocio lugarbo = new LugarNegocio();
                EquipodeMedicionNegocio equipobo = new EquipodeMedicionNegocio();
                VariableNegocio variablebo = new VariableNegocio();
                modelo.tiposdemuestra = tipomuetrabo.consultarTiposdeMuestra(cdc);
                modelo.proyectos = proyectobo.ConsultarProyectos(cdc);
                modelo.lugares = lugarbo.consultarLugares(cdc);
                modelo.equipos = equipobo.consultarEquiposdeMedicion(cdc);
                modelo.variables = variablebo.consultarVariables(cdc);
                ViewData.Model = modelo;
                return View("Crear", ViewData.Model);
            }

            String Id = "";
            int mayor = 0;
            int cantidad = muestras.Count;
            if (cantidad == 0)
            {
                Id = "M1";
            }
            else
            {
                foreach (var variable in muestras)
                {
                    string input = variable.Identificador;
                    string sub = input.Substring(1);
                    if ((int.Parse(sub) > mayor))
                    {
                        mayor = int.Parse(sub);
                    }
                   
                }
               Id = "M" + (mayor + 1);
            }
            Int32? idtipomuestra = muestra.Idtipodemuestra;
            Int32? idproyetoc = muestra.Iddeproyecto;
            Int32? idlugar = muestra.Iddelugar;
            DateTime fecha = muestra.Fechadecaptura;
            Int32? responsable = muestra.Codigoderesponsable;
            Int32? iddeequipo = muestra.Iddeequipo;
            Int32? iddevariable = muestra.Iddevariable;
            String valor = muestra.Valor;
            new MuestraNegocio().CrearMuestra(Id, idtipomuestra, idproyetoc, idlugar, fecha, responsable, null, iddeequipo, iddevariable, valor, cdc);
            return RedirectToAction("Index");
        }

        public ActionResult Eliminar(String id)
        {

            if (Session["Autenticado"] != "True")
            {
                return RedirectToAction("Index", "Inicio");
            }
            String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;

            if (!(id.Contains("A")))
            {

                new MuestraNegocio().eliminarMuestra(id, ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString);
                return RedirectToAction("Index");
            }
            ModelState.AddModelError("Pruebas", " No se pueden eliminar muetras automaticas.");
            List<Muestra> muestras = new MuestraNegocio().consultarMuestras(cdc);
            Muestrasreporte final = new Muestrasreporte();

            foreach (var muestra in muestras)
            {
                Muestramod MuestraTemp = new Muestramod();
                MuestraTemp.Codigo = muestra.Identificador;

                ProyectoNegocio proyectoaBuscar = new ProyectoNegocio();
                MuestraTemp.Proyecto = ((Proyecto)proyectoaBuscar.ConsultarPorIdentificador(muestra.Iddeproyecto, cdc)).Nombre;

                LugarNegocio LugaraBuscar = new LugarNegocio();
                MuestraTemp.Lugar = ((Lugar)LugaraBuscar.ConsultarPorIdentificador(muestra.Iddelugar, cdc)).Nombre;
                MuestraTemp.Fecha = muestra.Fechadecaptura;

                EquipodeMedicionNegocio equipoaBuscar = new EquipodeMedicionNegocio();
                MuestraTemp.Equipodemedicion = ((EquipodeMedicion)equipoaBuscar.consultarPorIdentificador(muestra.Iddeequipo, cdc)).Nombre;
                TipodeMuestraNegocio tipodemuestraaBuscar = new TipodeMuestraNegocio();
                MuestraTemp.TipoMuestra = ((TipodeMuestra)tipodemuestraaBuscar.consultarPorIdentificador(muestra.Idtipodemuestra, cdc)).Nombre;
                VariableNegocio variableaBuscar = new VariableNegocio();
                Variable nuevavariable = variableaBuscar.ConsultarPorIdentificador(muestra.Iddevariable, cdc);
                MuestraTemp.Variable = nuevavariable.Nombre;
                MuestraTemp.Valor = muestra.Valor;
                UnidaddeMedidaNegocio unidadaBuscar = new UnidaddeMedidaNegocio();
                MuestraTemp.Unidad = ((UnidaddeMedida)unidadaBuscar.consultarPorIdentificador(nuevavariable.Unidad, cdc)).Nombre;
                final.listademuestras.Add(MuestraTemp);
            }
            ViewData.Model = final;
            return View("Index", ViewData.Model);
        }

        
        [HttpGet]
        public JsonResult GetElements(int equipo)
        {
            String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
           
            List<EquipodeMedicion> tiposporequipoBO = new EquipodeMedicionNegocio().ConsultarEquiposDeMedicionPorMuestra(equipo,cdc);

            return Json(tiposporequipoBO, JsonRequestBehavior.AllowGet);
        }
        
        [HttpGet]
        public JsonResult GetElementos(int muestra)
        {
            String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;

            List<Variable> tiposporequipoBO = new VariableNegocio().ConsultarVariablesPorMuestra(muestra, cdc);

            return Json(tiposporequipoBO, JsonRequestBehavior.AllowGet);
        }
        

    }
}
